package in.rob.client.dialog; import in.lib.Constants; import in.lib.annotation.InjectView; import in.lib.annotation.OnClick; import in.lib.helper.DownloadHelper; import in.lib.utils.URLUtils; import in.lib.utils.Views; import in.lib.view.SwipableViewPager; import in.lib.view.TouchImageView; import in.lib.view.TouchImageView.OnScaleChangedListener; import in.rob.client.MainApplication; import in.rob.client.R; import in.rob.client.base.RobinDialogActivity; import lombok.Getter; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; public class ImageLightboxDialog extends RobinDialogActivity implements OnClickListener { private String[] imageUrls = {}; private String[] webUrls = {}; @Getter private Context context = this; @InjectView(R.id.pager) public SwipableViewPager pager; @InjectView(R.id.fullscreen_image) public ImageView mFsImage; @OnClick @InjectView(R.id.icon_web) public View mWeb; @OnClick @InjectView(R.id.icon_share) public View mShare; @OnClick @InjectView(R.id.icon_download) public View mDownload; @OnClick @InjectView(R.id.icon_copy) public View mCopy; @OnClick @InjectView(R.id.fail_message) public TextView failMessage; private int pagerPosition = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.image_lightbox); getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); getWindow().setGravity(Gravity.CENTER); getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.fullscreen_dialog_bg)); if (getIntent().getExtras() != null) { if (getIntent().getExtras().containsKey(Constants.EXTRA_PREVIEW_URL)) { Object urls = getIntent().getExtras().get(Constants.EXTRA_PREVIEW_URL); if (urls instanceof String[]) { imageUrls = getIntent().getExtras().getStringArray(Constants.EXTRA_PREVIEW_URL); } else { imageUrls = new String[]{getIntent().getExtras().getString(Constants.EXTRA_PREVIEW_URL)}; } } if (getIntent().getExtras().containsKey(Constants.EXTRA_WEB_URL)) { Object urls = getIntent().getExtras().get(Constants.EXTRA_PREVIEW_URL); if (urls instanceof String[]) { webUrls = getIntent().getExtras().getStringArray(Constants.EXTRA_WEB_URL); } else { webUrls = new String[]{getIntent().getExtras().getString(Constants.EXTRA_WEB_URL)}; } } else { webUrls = imageUrls; } pagerPosition = getIntent().getExtras().getInt(Constants.EXTRA_IMAGE_POSITION, 0); } else { finish(); return; } if (savedInstanceState != null) { pagerPosition = savedInstanceState.getInt(Constants.EXTRA_IMAGE_POSITION); } Views.inject(this); pager.setAdapter(new ImagePagerAdapter(imageUrls, pager)); pager.setCurrentItem(pagerPosition); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(Constants.EXTRA_IMAGE_POSITION, pager.getCurrentItem()); super.onSaveInstanceState(outState); } @Override public void onClick(View v) { if (v == mWeb) { try { Intent web = new Intent(Intent.ACTION_VIEW); web.setData(Uri.parse(webUrls[pager.getCurrentItem()])); startActivity(web); } catch (Exception e) { Toast.makeText(getContext(), R.string.failed_intent, Toast.LENGTH_LONG).show(); } } else if (v == mShare) { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, webUrls[pager.getCurrentItem()]); shareIntent.setType("text/plain"); startActivity(shareIntent); } else if (v == mDownload) { DownloadHelper.showMediaDownloadPopup(getContext(), webUrls[pager.getCurrentItem()]); } else if (v == mCopy) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(webUrls[pager.getCurrentItem()]); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", webUrls[pager.getCurrentItem()]); clipboard.setPrimaryClip(clip); } Toast.makeText(getContext(), getContext().getString(R.string.copy_url_success), Toast.LENGTH_SHORT).show(); } } private class ImagePagerAdapter extends PagerAdapter { private String[] images; private LayoutInflater inflater; private SwipableViewPager pager; ImagePagerAdapter(String[] images, SwipableViewPager pager) { this.images = images; this.pager = pager; inflater = getLayoutInflater(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager)container).removeView((View)object); } @Override public void finishUpdate(View container) { } @Override public int getCount() { return images.length; } @Override public Object instantiateItem(ViewGroup view, int position) { final View imageLayout = inflater.inflate(R.layout.image_lightbox_image, view, false); loadImage(imageLayout, position); ((ViewPager)view).addView(imageLayout, 0); return imageLayout; } private void loadImage(final View v, final int position) { final ImageView imageView = (ImageView)v.findViewById(R.id.fullscreen_image); final ProgressBar spinner = (ProgressBar)v.findViewById(R.id.progress); final TextView failedText = (TextView)v.findViewById(R.id.fail_message); failedText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v2) { loadImage(v, position); } }); ((TouchImageView)imageView).setOnScaleChangedListener(new OnScaleChangedListener() { @Override public void onScaleChanged(float newScale) { if (newScale <= 1f) { pager.setCanSwipe(true); pager.requestDisallowInterceptTouchEvent(false); } else { pager.setCanSwipe(false); pager.requestDisallowInterceptTouchEvent(true); } } }); ImageLoader.getInstance().displayImage(URLUtils.fixInlineImage(Uri.parse(images[position])), imageView, MainApplication.getMediaImageOptions(), new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { spinner.setVisibility(View.VISIBLE); failedText.setVisibility(View.GONE); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { spinner.setVisibility(View.GONE); failedText.setVisibility(View.VISIBLE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { spinner.setVisibility(View.GONE); failedText.setVisibility(View.GONE); } @Override public void onLoadingCancelled(String imageUri, View view) { spinner.setVisibility(View.GONE); } }); } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } }